import time
import asyncio
import redis
import redis.asyncio as aioredis

TOTAL = 500  # 每个实例写入的 key 数量

# 同步操作多个 Redis 实例
def sync_multi_redis():
    # 创建两个同步客户端
    redis_clients = [
        redis.StrictRedis(host='localhost', port=6379, decode_responses=True),
        redis.StrictRedis(host='localhost', port=6379, decode_responses=True),
    ]

    start = time.time()
    for i in range(TOTAL):
        # 交替写入两个 Redis，key 带实例区分
        redis_clients[0].set(f"redis1:user:{i}", f"value{i}")
        redis_clients[1].set(f"redis2:user:{i}", f"value{i}")
    print(f"[同步多 Redis] 总耗时：{round(time.time() - start, 2)} 秒")


# 异步操作多个 Redis 实例
async def async_multi_redis():
    # 创建两个异步客户端
    redis_clients = [
        aioredis.Redis(host='localhost', port=6379, decode_responses=True),
        aioredis.Redis(host='localhost', port=6379, decode_responses=True),
    ]

    start = time.time()
    tasks = []

    for i in range(TOTAL):
        # 异步写入两个 Redis，key 带实例区分
        tasks.append(redis_clients[0].set(f"redis1:user:{i}", f"value{i}"))
        tasks.append(redis_clients[1].set(f"redis2:user:{i}", f"value{i}"))

    # 并发执行所有写操作
    await asyncio.gather(*tasks)

    print(f"[异步多 Redis] 总耗时：{round(time.time() - start, 2)} 秒")

    # 关闭所有连接
    await asyncio.gather(*[client.aclose() for client in redis_clients])


if __name__ == "__main__":
    print("开始测试多 Redis 同步写入")
    sync_multi_redis()

    print("\n开始测试多 Redis 异步写入")
    asyncio.run(async_multi_redis())

"""
[同步多 Redis] 总耗时：4.15 秒
开始测试多 Redis 异步写入
[异步多 Redis] 总耗时：2.89 秒    
"""